<?php
/**
 * tinymvc超轻量级PHP开发框架
 *
 * @author    Lansn
 * @copyright Copyright (c) 2024-2025
 * @license   tinymvc 遵循Apache2开源协议发布，需保留开发者信息。
 * @link      http://173654757.xyz
 */

use tinymvc\core\Config;
use tinymvc\core\Lang;

/**
 * 快捷获取配置项
 * 用法：config('database.mysql.host')，支持默认值：config('xx.yy', 'default')
 *
 * @param  string $key     配置键名，支持点语法
 * @param  mixed  $default 默认值
 * @return mixed
 */
function config(string $key, $default = null)
{
    return Config::get($key, $default);
}

function lang(string $key, $default = ''): string
{
    return Lang::get($key, $default);
}

function json($data)
{
    header('Content-Type:application/json; charset=utf-8');
    exit(json_encode($data, JSON_UNESCAPED_UNICODE));
}

function redirect(string $url, int $code = 303)
{
    Flight::redirect($url, $code);
}

function download(string $filePath)
{
    Flight::download($filePath);
}

/**
 * 生成 URL 地址
 *
 * @param string $path   路由路径，格式如：'admin/user/edit'
 * @param array  $params 附加参数数组（自动拼接到 URI 中或作为 ? 查询字符串）
 * @param bool   $withSuffix 是否添加伪静态后缀（.html），默认 true
 * @return string 生成的完整 URL
    | 调用方式                                                | 生成结果                              |
    | ------------------------------------------------------ | ------------------------------------- |
    | `url('user/profile')`                                  | `/user/profile.html`（默认加后缀）     |
    | `url('user/profile', [123])`                           | `/user/profile/123.html`              |
    | `url('user/profile', ['id' => 1, 'from' => 'google'])` | `/user/profile.html?id=1&from=google` |
    | `url('user/profile', [], false)`                       | `/user/profile`                       |
 */
function url(string $path, array $params = [], bool $withSuffix = true): string
{
    $urlSuffix = config('app.url_suffix') ?? '';
    
    // 基础路径清理
    $path = trim($path, '/');

    // 判断是位置参数还是 GET 参数
    if (!empty($params)) {
        $isAssoc = array_keys($params) !== range(0, count($params) - 1);
        
        if ($isAssoc) {
            // GET 参数模式
            $queryString = http_build_query($params);
            $path .= $withSuffix && $urlSuffix ? $urlSuffix : '';
            return '/' . $path . '?' . $queryString;
        } else {
            // 位置参数模式（自动拼接）
            $path .= '/' . implode('/', array_map('urlencode', $params));
            $path = rtrim($path, '/');
        }
    }

    // 添加伪静态后缀
    if ($withSuffix && !empty($urlSuffix)) {
        $path .= $urlSuffix;
    }

    return '/' . $path;
}
